<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 面向对象编程的基本语法
    function fn(yy){
        this.yy = yy
    }
    fn.prototype.xxx = function(){}
    const f = new fn("hahah");
    console.log(f.yy)
    f.xxx();

    // 函数.prototype === (new 函数).__proto__
    console.log(fn.prototype === f.__proto__)

    // 函数.prototype.constructor === 函数
    console.log(fn.prototype.constructor === fn)

    // (new 函数).__proto__.constructor === 函数
    console.log(f.__proto__.constructor === fn)

    // (new 函数).constructor === 函数
    console.log(f.constructor === fn);

    // (new 函数).constructor === 函数.prototype.constructor
    console.log(f.constructor === fn.prototype.constructor);

    // ===============

    function People(name){
        this.msg = name;
    }
    People.prototype.sayHello = function(){
        console.log("hello " + this.msg);
    }

    const p = new People("admin");
    console.log(p.msg);
    p.sayHello();

    // 自定义的工厂模式，就是函数封装（被迭代）
    // 内置的工厂，是构造自定义函数
    // 构造自定义函数的命名方式：大驼峰

    

</script>
</html>